package com.wangsh.forward.system.dao.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.wangsh.forward.system.dao.IASysHistoryDao;
import com.wangsh.forward.system.pojo.ASysHistory;
import com.wangsh.webforward.common.dao.impl.BaseDaoImpl;
import com.wangsh.webforward.common.util.ConstatFinalUtil;

/**
 * 系统属性Dao的实现类
 * @author TeaBig
 */
public class ASysHistoryDaoImpl extends BaseDaoImpl<ASysHistory> implements IASysHistoryDao
{
	/* 表名 */
	private String tableName = "sys_history.json" ; 
	/* 文件 */
	private static File dbFile ;
	/* 主键 */
	private static int id ;
	/* 数据:key:数据的id,值:对象 */
	private static Map<Integer,ASysHistory> dataMap = new TreeMap<Integer, ASysHistory>();
	
	public ASysHistoryDaoImpl()
	{
		this.init();
		/* 读取数据 */
		this.readFile();
	}
	
	/**
	 * 初始化操作
	 */
	private boolean init()
	{
		try
		{
			if(dbFile == null)
			{
				/* 删除temp下面所有的文件 */
				/* tomcat系统的配置 */
				JSONObject pathTomcatJSON = ConstatFinalUtil.SYS_PRO_MAP.get("path.tomcat") ;
				if(pathTomcatJSON != null)
				{
					/* 获取Tomcat的根路径 */
					String pathTomcat = pathTomcatJSON.getString("value") ; 
					/* 为数据对象赋值,超级重要 */
					this.dbFile = new File(pathTomcat + relaPath + tableName);
				}else
				{
					return false ; 
				}
			}
			
			if(!this.dbFile.getParentFile().exists())
			{
				this.dbFile.getParentFile().mkdirs() ; 
			}
			if(!this.dbFile.exists())
			{
				this.dbFile.createNewFile() ; 
			}
			return true ; 
		} catch (IOException e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("初始化出错了,",e);
		}
		return false ; 
	}
	
	@Override
	protected boolean writeFile()
	{
		try
		{
			if(this.init())
			{
				/* dbFile已经初始化成功 */
				/* 存储数据 */
				List<String> dataList = new ArrayList<String>();
				/* 集合 */
				Set entrySet = this.dataMap.entrySet() ;
				for (Iterator iterator = entrySet.iterator(); iterator.hasNext();)
				{
					Entry<Integer, ASysHistory> me = (Entry<Integer, ASysHistory>) iterator.next() ; 
					int id = me.getKey() ; 
					ASysHistory pojo = me.getValue() ; 
					/* pojo对应的JSON */
					JSONObject dataTempJSON = pojo.toJSON() ; 
					/* 将数据放到集合中 */
					dataList.add(dataTempJSON.toJSONString()) ; 
				}
				/* 创建输入流 */
				FileOutputStream fos = new FileOutputStream(this.dbFile);
				/* 写文件的内容 */
				this.fileUtil.writeFile(fos, dataList);
			}
			return true ; 
		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("写文件出错了,",e);
		}
		return false;
	}

	@Override
	protected Map<Integer, ASysHistory> readFile()
	{
		try
		{
			if(this.dbFile != null && this.dbFile.exists())
			{
				/* 接入一个输入流 */
				InputStream is = new FileInputStream(this.dbFile);
				/* 读取文件内容 */
				List<String> dataList = this.fileUtil.readFileList(is);
				for (Iterator iterator = dataList.iterator(); iterator.hasNext();)
				{
					String dataTemp = (String) iterator.next();
					/* 将字符串转换为对象 */
					JSONObject dataTempJSON = (JSONObject) JSON.parse(dataTemp);
					ASysHistory pojo = new ASysHistory();
					/* 将json转换为pojo对象 */
					pojo = pojo.parseJSON(dataTempJSON);
					if(pojo.getId() >= this.id )
					{
						this.id = pojo.getId() ; 
					}
					/* 将json数据存储到dataMap中 */
					this.dataMap.put(pojo.getId(), pojo);
				}
				
				/* id自增 */
				this.id ++ ; 
			}
		} catch (Exception e)
		{
			ConstatFinalUtil.SYS_LOGGER.error("读取文件出错了,",e);
		}
		return this.dataMap ; 
	}

	@Override
	public ASysHistory findOne(Map condMap)
	{
		String name = condMap.get("name")+"";
		for (Iterator iterator = this.dataMap.entrySet().iterator(); iterator.hasNext();)
		{
			Entry<Integer,ASysHistory> me = (Entry) iterator.next();
			int id = me.getKey() ;
			ASysHistory sysHistory = me.getValue() ; 
			/* 启用搜索条件 */
			if(name.equalsIgnoreCase(sysHistory.getName())) {
				
				return sysHistory;
			};
		}
		return null;
	}

	@Override
	public List<ASysHistory> findList(Map condMap)
	{
		/* 存储所有的数据 */
		List<ASysHistory> sysHistoryList = new ArrayList<ASysHistory>();
		/* condMap:存储的是搜索条件 */
		for (Iterator iterator = this.dataMap.entrySet().iterator(); iterator.hasNext();)
		{
			Entry<Integer,ASysHistory> me = (Entry) iterator.next();
			int id = me.getKey() ;
			ASysHistory sysHistory = me.getValue() ; 
			/* 启用搜索条件 */
			
			/* 添加记录 */
			sysHistoryList.add(sysHistory);
		}
		return sysHistoryList;
	}

	@Override
	public int save(ASysHistory t)
	{
		t.setId(id);
		/* 存储数据 */
		this.dataMap.put(t.getId(),t);
		/* 存储文件 */
		this.writeFile();
		/* id自增 */
		this.id ++ ; 
		return 1;
	}

	@Override
	public int update(int id, ASysHistory t)
	{
		/* 更新数据 */
		this.dataMap.put(id, t);
		/* 存储文件 */
		this.writeFile();
		return 1 ; 
	}

}
